package com.huang.rabbitmq.routing;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Product {
    public static void main(String[] args) {
        //1 创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.56.10");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");

        Connection connection=null;
        Channel channel =null;
        //2  创建连接 connection
        try {
            connection=connectionFactory.newConnection("生产者");
            //3通过连接通道 获取 Channel
            channel = connection.createChannel();
            //4 通过创建的交换机  声明队列 绑定关系  路由key 发送消息和接收消息
            String queueName="queue1";
            // 队列名  是否要持久化  排他性   最后一个消费者发送完毕后是否自动删除  参数
            channel.queueDeclare(queueName,true,false,false,null);
            //5 准备消息内容
            String message="HELLO ";
            //创建交换机
            String exchange="direct_message_exchange";
            //定义路由key
            String routeKey="order";
            String type="direct";


            //声明没有的交换机
            channel.exchangeDeclare(exchange,type,true);
            //声明队列
            channel.queueDeclare("queue5",true,false,false,null);
            channel.queueDeclare("queue6",true,false,false,null);
            channel.queueDeclare("queue7",true,false,false,null);
            //交换机绑定队列
            channel.queueBind("queue5",exchange,"order");
            channel.queueBind("queue6",exchange,"order");
            channel.queueBind("queue7",exchange,"course");


            // 6 发送消息给队列 queue
            //   交换机  队列路由key   消息状态控制   消息主体    （不存在 没有交换机的队列  未声明交换机 默认交换机）
            channel.basicPublish(exchange,routeKey,null,message.getBytes());
            System.out.println("发送成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7关闭通道
            //8关闭连接
            if(channel!=null && connection!=null){
                try {
                    channel.close();
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }

            }

        }

    }
}
